<?php
namespace Controller;
use GFPHP\Config;
use GFPHP\Loader;
if (!defined('__ROOT__')) exit('Sorry,Please from entry!');

/**
 * Controller基类
 * 处理模型和视图操作
 * 创建日期：2014-08-09 00:20
 */
class Controller
{
    protected $load;
    public $method,$controller,$module;
    //----可以在子类中不可覆盖此方法

    /**
     * Controller constructor.
     */
    final public function __construct()
    {
        $this->load = &Loader::$load;
        $this->Init();
    }

    final public function __destruct()
    {
        // TODO: Implement __destruct() method.
        unset($this->load);
    }

    //----如果控制器中每个方法都会调用一个方法，请覆盖此方法
    public function Init(){
    }

    /**
     * 传入模板内容,返回模板执行获取的内容
     * @param $templateCon
     * @return string
     */
    final function fetch($templateCon){
        return $content = Loader::template()->fetch($templateCon);
    }
    //-----给模板赋值变量
    /**
     * 当为一个参数时,必须为数组形式
     * @param string|array $key
     */
    final function assign($key){
        if(func_num_args()==1){
            Loader::template()->assign(func_get_arg(0));
        }
        elseif(func_num_args()==2){
            Loader::template()->assign(func_get_arg(0),func_get_arg(1));
        }
    }

    /**
     * 编译当前控制器方法模板
     * @param bool $cacheTime
     * @param bool $cacheKey
     */
    final function display($cacheTime = false, $cacheKey = false){
        Config::set(array(
            'module_path'   =>  pathToUrl(__ROOT__.parseDir(Config::config('app_dir'), Config::config('Module_dir'),$this->module))
        ),'runtime');
        $template = $this->module.'/'.$this->controller.'.'.$this->method;
        $this->assign('_ACT', array('controller'=>$this->controller,'method'=>$this->method));
        /** @var string $template */
        Loader::template()->display($template, $cacheTime, $cacheKey);
    }

}

//====================    END Controller.class.php      ========================//